package com.redepronik.negosysres.invfac.controller;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.redepronik.negosys.invfac.entity.Tipodocumento;
import com.redepronik.negosys.invfac.service.TipoDocumentoService;

@Controller
@Scope("session")
public class TipoDocumentoBean {

	@Autowired
	private TipoDocumentoService tipoDocumentoService;

	private List<Tipodocumento> listaTipoDocumentos;
	private Tipodocumento tipoDocumento;

	public TipoDocumentoBean() {
		tipoDocumento = new Tipodocumento();
	}

	public void actualizar(ActionEvent actionEvent) {
		String mensaje = tipoDocumentoService.actualizar(tipoDocumento);
		mensaje(mensaje, "ACTUALIZÓ");
	}

	public void eliminar(ActionEvent actionEvent) {
		tipoDocumentoService.eliminar(tipoDocumento);
		if (tipoDocumento.getActivo())
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ACTIVO", "EL TIPO DE DOCUMENTO: "
							+ tipoDocumento.getNombre()));
		else
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"DESACTIVO", "EL TIPO DE DOCUMENTO: "
							+ tipoDocumento.getNombre()));
	}

	public List<Tipodocumento> getListaTipoDocumentos() {
		if (listaTipoDocumentos == null) {
			listaTipoDocumentos = new ArrayList<Tipodocumento>();
			listaTipoDocumentos = tipoDocumentoService.obtener(null);
		}
		return listaTipoDocumentos;
	}

	public Tipodocumento getTipoDocumento() {
		return tipoDocumento;
	}

	public void insertar(ActionEvent actionEvent) {
		tipoDocumento.setPordefecto(false);
		String mensaje = tipoDocumentoService.insertar(tipoDocumento);
		listaTipoDocumentos = tipoDocumentoService.obtener(null);
		mensaje(mensaje, "INSERTÓ");
	}

	public void limpiar() {
		tipoDocumento = new Tipodocumento();
	}

	private void mensaje(String mensaje, String titulo) {
		RequestContext context = RequestContext.getCurrentInstance();
		if (mensaje.compareTo("SAVE") == 0) {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					titulo, "Tipo de Documento: " + tipoDocumento.getNombre()));
			context.addCallbackParam("error", true);
			limpiar();
		} else {
			presentaMensaje(new FacesMessage(FacesMessage.SEVERITY_INFO,
					"ERROR", mensaje));
			context.addCallbackParam("error", false);
		}
	}

	private void presentaMensaje(FacesMessage message) {
		FacesContext.getCurrentInstance().addMessage(null, message);
	}

	public void setListaTipoDocumentos(List<Tipodocumento> listaTipoDocumentos) {
		this.listaTipoDocumentos = listaTipoDocumentos;
	}

	public void setTipoDocumento(Tipodocumento tipoDocumento) {
		this.tipoDocumento = tipoDocumento;
	}

}
